#include <iostream>

using namespace std;

// 1.函数重载: 允许函数名相同
// 2.作用: 方便使用函数名
// 3.条件: 同个作用域; 参数的个数不相同; 参数顺序不同; 参数类型不同
// 4.需要区别函数参数默认值的二义性

// 函数重载的原理: C++ 在汇编的时候会给重载的函数取别名, 而 C 在汇编时不会给函数取别名
// C++ 的函数别名类似的形式: xxxv xxxi xxxc xxxic xxxci

void function() {
    cout << "调用了 function() 函数" << endl;
}

// 1.参数个数不相同
void function(int a) {
    cout << "调用了 function(int) 函数" << endl;
}

// 2.参数类型不相同
void function(char a) {
    cout << "调用了 function(char) 函数" << endl;
}

// 3.参数顺序不相同
void function(int a, char b) {
    cout << "调用了 function(int, char) 函数" << endl;
}

void function(char a, int b) {
    cout << "调用了 function(char, int) 函数" << endl;
}

void test01() {
    int a = 100;
    char b = 'b';

    function();

    function(a);

    function(b);

    function(a, b);

    function(b, a);
}

int main() {
    test01();
}